<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <title>Document</title>
  <style>
    
  </style>
</head>
<body>
  
</body>
<script>

// 1. 字符去重，封装函数，返回去重之后的字符
function noRepeat(str){
  var newStr = "";
  for(var i=0;i<str.length;i++){
    if(newStr.indexOf(str[i]) === -1){
      newStr += str[i];
    }
  }
  return newStr;
}
// var str = "abcbdcbaqweasddsaqsdew";
// console.log(str)
// console.log(noRepeat(str));
// console.log(str)

// 2. 统计字符串中每个字符出现的次数，以对象存储结果，封装函数，返回对象
function count(str){
  // 1. 创建空对象，准备记录
  var obj = {};
  // 2. 遍历字符，准备判断
  for(var i=0;i<str.length;i++){
    // 3. 利用对象是否存在该字符对应的属性的判断
    if( obj[ str[i] ] ){
      // 5. 如果存在，就给对象当前字符对应的属性的值 + 1（表示有一次遇到了）
      obj[ str[i] ]++;
    }else{
      // 4. 如果不存在，给对象添加当前字符对应的属性，值为1（表示第一次遇到）
      obj[ str[i] ] = 1;
    }
  }
  // 返回
  return obj;
}
// var str = "abcbdcbaqweasddsaqsdew";
// console.log( str );
// console.log( count(str) );
// console.log( str );

// 3. 判断字符串是否是回文字符串，封装函数，返回布尔值
function fn(str){
  // 因为回文字符串的对称性，只需要遍历一半字符串即可
  var n = parseInt(str.length/2);
  // 遍历
  for(var i=0;i<n;i++){
    // 将第i位和第length-1-i位进行比较
    // 只要有一个不相等
    if(str[i] !== str[str.length-1-i]){
      // 不是回文
      return false
    }
  }
  // 没有发现任何一个不相等，是回文
  return true;
}
// console.log( fn("abccba") );
// console.log( fn("abcba") );
// console.log( fn("abcda") );
// console.log( fn("abccda") );

// 4. 敏感词过滤
//   ○ 原文：今天天气很好，我们开开心心去上学，今天天气很好
//   ○ 敏感词：好，开心，上学
//   ○ 过滤结果：今天天气很***，我们开***心去***，今天天气很***
function filter(arr, str){
  // 解析敏感词库
  for(var i=0;i<arr.length;i++){
    // 假设整个字符串全都是敏感词
    for(var j=0;j<str.length;j++){
      // 根据解析出的敏感词，替换成***
      // 注意：字符的方法不回修改原字符，手动覆盖变量
      str = str.replace(arr[i], "***");
    }
  }
  // 返回
  return str;
}
// var str = "今天天气很好，我们开开心心去上学，今天天气很好";
// var arr = ["好", "开心", "上学"];
// console.log(str)
// console.log(filter(arr, str));
// console.log(str)

  
</script>
</html>